The distribution of a single program, so that a portion of the program executes on more than one computer has become more pervasive as "desktop" computers become more powerful. FIG. 1 demonstrates an example of a computer network containing several distributed computers upon which an application can execute. While most computer networks are many orders of magnitude larger, this small network is used as an example. Presently, many computer systems allow objects to communicate over a network. One method of allowing objects to communicate over a network is RPC, which stands for Remote Procedure Calls. RPC has existed since the mid 1980s and is further described by Birrell and Nelson in Implementing Remote Procedure Calls, ACM Transactions on Computer Systems 2, 1984, pp 39-59. Further improvements have been made to RPC, such as DSOM, or Distributed Systems Object Model, continuing into the present. In the systems of the prior art, the programmer describes the interfaces to the objects using an Interface Definition Language (IDL). The systems then provide tools that automatically transform the IDL specification into executable code.
Recently, Sun Microsystems released an object oriented programming language called Java which includes a capability similar to that of RPC and DSOM called Remote Method Invocation, or RMI. Using systems which are Java enabled, the programmer can now write a distributed object program without explicit recognition of the network upon which the program will be running. However, using this technology, the programmer or implementer is still required to write additional code that enables remote invocation of objects (or write the IDL specification). As with all coding tasks, writing IDL is error-prone. In addition, should the programmer determine that the point at which he chose to distribute the objects is sub-optimal, he must delete the current specification, and write another. Since choosing the optimal distribution point is a difficult task, this problem occurs often in modem programming environments. In addition, the optimal distribution point may vary based on computing topologies. For example, if two computers are equally powerful, then the optimal distribution might have an equal number of objects executing on each computer; if the two computers have disparate capabilities, then the more powerful computer might execute more of the objects. Since heterogeneous computing topologies are common, code written statically using an IDL often results in suboptimal performance.
Alternatively, many program-creation tools allow a programmer to specify a program using the tool, and indicate the object boundaries at which the objects are to be distributed. The tool then generates the executable code for the program. However, these tools generate static program partitions, and thus suffer from heterogeneity problems similar to IDL systems. In addition, tools do not typically interoperate. Thus, multiple programmers working on the same program are forced to standardize on the same tool to work effectively together. Since tools have strengths and weaknesses, standardizing on a single tool is undesirable.